﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Data;  
using System.Data.SqlClient;  
  
namespace CapaDatos  
{  
    public class DIngreso  
    {  
        //Variables  
        private int _Idingreso;  
        private int _Idproveedor;  
        private int _Idtrabajador;  
        private DateTime _Fecha;  
        private string _Tipo_Comprobante;  
        private string _Serie;  
        private string _Correlativo;  
        private decimal _Igv;  
        private string _Estado;  
  
          
        //Propiedades  
        public int Idingreso  
        {  
            get { return _Idingreso; }  
            set { _Idingreso = value; }  
        }  
          
        public int Idproveedor  
        {  
            get { return _Idproveedor; }  
            set { _Idproveedor = value; }  
        }  
          
        public int Idtrabajador  
        {  
            get { return _Idtrabajador; }  
            set { _Idtrabajador = value; }  
        }  
  
        public DateTime Fecha  
        {  
            get { return _Fecha; }  
            set { _Fecha=value;}  
        }  
  
        public string Tipo_Comprobante  
        {  
            get { return _Tipo_Comprobante; }  
            set { _Tipo_Comprobante = value; }  
        }  
          
        public string Serie  
        {  
            get { return _Serie; }  
            set { _Serie = value; }  
        }  
          
        public string Correlativo  
        {  
            get { return _Correlativo; }  
            set { _Correlativo = value; }  
        }  
          
        public decimal Igv  
        {  
            get { return _Igv; }  
            set { _Igv = value; }  
        }  
  
        public string Estado  
        {  
            get { return _Estado; }  
            set { _Estado = value; }  
        }  
  
        //Constructores  
        public DIngreso()  
        {  
  
        }  
        public DIngreso(int idingreso,int idtrabajador,int idproveedor,DateTime fecha,string tipo_comprobante,string serie,string correlativo,decimal igv,string estado)  
        {  
            this.Idingreso = idingreso;  
            this.Idtrabajador = idtrabajador;  
            this.Idproveedor = idproveedor;  
            this.Fecha = fecha;  
            this.Tipo_Comprobante = tipo_comprobante;  
            this.Serie = serie;  
            this.Correlativo = correlativo;  
            this.Igv = igv;  
            this.Estado = estado;  
        }  
        //Métodos  
        public string Insertar(DIngreso Ingreso, List<DDetalle_Ingreso> Detalles)  
        {  
            string rpta = "";  
            SqlConnection SqlCon = new SqlConnection();  
            try  
            {  
                //Código  
                SqlCon.ConnectionString = Conexion.Cn;  
                SqlCon.Open();  
                //Establecer la transacción  
                SqlTransaction SqlTra = SqlCon.BeginTransaction();  
                //Establecer el Comando  
                SqlCommand SqlCmd = new SqlCommand();  
                SqlCmd.Connection = SqlCon;  
                SqlCmd.Transaction = SqlTra;  
                SqlCmd.CommandText = "spinsertar_ingreso";  
                SqlCmd.CommandType = CommandType.StoredProcedure;  
  
                //Parámetros  
                SqlParameter ParIdingreso = new SqlParameter();  
                ParIdingreso.ParameterName = "@idingreso";  
                ParIdingreso.SqlDbType = SqlDbType.Int;  
                ParIdingreso.Direction = ParameterDirection.Output;  
                SqlCmd.Parameters.Add(ParIdingreso);  
  
                SqlParameter ParIdTrabajador = new SqlParameter();  
                ParIdTrabajador.ParameterName = "@idtrabajador";  
                ParIdTrabajador.SqlDbType = SqlDbType.Int;  
                ParIdTrabajador.Value = Ingreso.Idtrabajador;  
                SqlCmd.Parameters.Add(ParIdTrabajador);  
  
                SqlParameter ParIdproveedor = new SqlParameter();  
                ParIdproveedor.ParameterName = "@idproveedor";  
                ParIdproveedor.SqlDbType = SqlDbType.Int;  
                ParIdproveedor.Value = Ingreso.Idproveedor;  
                SqlCmd.Parameters.Add(ParIdproveedor);  
  
                  
                SqlParameter ParFecha = new SqlParameter();  
                ParFecha.ParameterName = "@fecha";  
                ParFecha.SqlDbType = SqlDbType.VarChar;  
                ParFecha.Value = Ingreso.Fecha;  
                SqlCmd.Parameters.Add(ParFecha);  
  
                SqlParameter ParTipo_Comprobante = new SqlParameter();  
                ParTipo_Comprobante.ParameterName = "@tipo_comprobante";  
                ParTipo_Comprobante.SqlDbType = SqlDbType.VarChar;  
                ParTipo_Comprobante.Size = 20;  
                ParTipo_Comprobante.Value = Ingreso.Tipo_Comprobante;  
                SqlCmd.Parameters.Add(ParTipo_Comprobante);  
  
                SqlParameter ParSerie = new SqlParameter();  
                ParSerie.ParameterName = "@serie";  
                ParSerie.SqlDbType = SqlDbType.VarChar;  
                ParSerie.Size = 4;  
                ParSerie.Value = Ingreso.Serie;  
                SqlCmd.Parameters.Add(ParSerie);  
  
                SqlParameter ParCorrelativo = new SqlParameter();  
                ParCorrelativo.ParameterName = "@correlativo";  
                ParCorrelativo.SqlDbType = SqlDbType.VarChar;  
                ParCorrelativo.Size = 7;  
                ParCorrelativo.Value = Ingreso.Correlativo;  
                SqlCmd.Parameters.Add(ParCorrelativo);  
  
                SqlParameter ParIgv= new SqlParameter();  
                ParIgv.ParameterName = "@igv";  
                ParIgv.SqlDbType = SqlDbType.Decimal;  
                ParIgv.Precision = 4;  
                ParIgv.Scale = 2;  
                ParIgv.Value = Ingreso.Igv;  
                SqlCmd.Parameters.Add(ParIgv);  
  
                SqlParameter ParEstado = new SqlParameter();  
                ParEstado.ParameterName = "@estado";  
                ParEstado.SqlDbType = SqlDbType.VarChar;  
                ParEstado.Size = 7;  
                ParEstado.Value = Ingreso.Estado;  
                SqlCmd.Parameters.Add(ParEstado);  
  
                  
                //Ejecutamos nuestro comando  
                rpta = SqlCmd.ExecuteNonQuery() == 1 ? "OK" : "NO se Ingreso el Registro";  
                if (rpta.Equals("OK"))  
                {  
                    //Obtenemos el codigo del ingreso que se genero por la base de datos  
  
                    this.Idingreso = Convert.ToInt32(SqlCmd.Parameters["@idingreso"].Value);  
                    foreach (DDetalle_Ingreso det in Detalles)  
                    {  
                        //Establecemos el codigo del ingreso que se autogenero  
                        det.Idingreso = this.Idingreso;  
                        //Llamamos al metodo insertar de la clase DetalleIngreso  
                        //y le pasamos la conexion y la transaccion que debe de usar  
                        rpta = det.Insertar(det, ref SqlCon, ref SqlTra);  
                        if (!rpta.Equals("OK"))  
                        {  
                            //Si ocurre un error al insertar un detalle de ingreso salimos del for  
                            break;  
                        }  
                    }  
                }  
                if (rpta.Equals("OK"))  
                {  
                    //Se inserto todo los detalles y confirmamos la transaccion  
                    SqlTra.Commit();  
                }  
                else  
                {  
                    //Algun detalle no se inserto y negamos la transaccion  
                    SqlTra.Rollback();  
                }  
  
            }  
            catch (Exception ex)  
            {  
                rpta = ex.Message;  
            }  
            finally  
            {  
                if (SqlCon.State == ConnectionState.Open) SqlCon.Close();  
            }  
            return rpta;  
  
        }  
  
        public string Anular(DIngreso Ingreso)  
        {  
            string rpta = "";  
            SqlConnection SqlCon = new SqlConnection();  
            try  
            {  
                //Código  
                SqlCon.ConnectionString = Conexion.Cn;  
                SqlCon.Open();  
                //Establecer el Comando  
                SqlCommand SqlCmd = new SqlCommand();  
                SqlCmd.Connection = SqlCon;  
                SqlCmd.CommandText = "spanular_ingreso";  
                SqlCmd.CommandType = CommandType.StoredProcedure;  
  
                SqlParameter ParIdingreso = new SqlParameter();  
                ParIdingreso.ParameterName = "@idingreso";  
                ParIdingreso.SqlDbType = SqlDbType.Int;  
                ParIdingreso.Value = Ingreso.Idingreso;  
                SqlCmd.Parameters.Add(ParIdingreso);  
                //Ejecutamos nuestro comando  
  
                rpta = SqlCmd.ExecuteNonQuery() == 1 ? "OK" : "NO se anulo el Ingreso";  
  
            }  
            catch (Exception ex)  
            {  
                rpta = ex.Message;  
            }  
            finally  
            {  
                if (SqlCon.State == ConnectionState.Open) SqlCon.Close();  
            }  
            return rpta;  
        }  
  
  
        //Método Mostrar  
        public DataTable Mostrar()  
        {  
            DataTable DtResultado = new DataTable("ingreso");  
            SqlConnection SqlCon = new SqlConnection();  
            try  
            {  
                SqlCon.ConnectionString = Conexion.Cn;  
                SqlCommand SqlCmd = new SqlCommand();  
                SqlCmd.Connection = SqlCon;  
                SqlCmd.CommandText = "spmostrar_ingreso";  
                SqlCmd.CommandType = CommandType.StoredProcedure;  
  
                SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);  
                SqlDat.Fill(DtResultado);  
  
            }  
            catch (Exception ex)  
            {  
                DtResultado = null;  
            }  
            return DtResultado;  
  
        }  
  
  
        //Método BuscarFechas  
        public DataTable BuscarFechas(String TextoBuscar,String TextoBuscar2)  
        {  
            DataTable DtResultado = new DataTable("ingreso");  
            SqlConnection SqlCon = new SqlConnection();  
            try  
            {  
                SqlCon.ConnectionString = Conexion.Cn;  
                SqlCommand SqlCmd = new SqlCommand();  
                SqlCmd.Connection = SqlCon;  
                SqlCmd.CommandText = "spbuscar_ingreso_fecha";  
                SqlCmd.CommandType = CommandType.StoredProcedure;  
  
                SqlParameter ParTextoBuscar = new SqlParameter();  
                ParTextoBuscar.ParameterName = "@textobuscar";  
                ParTextoBuscar.SqlDbType = SqlDbType.VarChar;  
                ParTextoBuscar.Size = 50;  
                ParTextoBuscar.Value = TextoBuscar;  
                SqlCmd.Parameters.Add(ParTextoBuscar);  
  
                SqlParameter ParTextoBuscar2 = new SqlParameter();  
                ParTextoBuscar2.ParameterName = "@textobuscar2";  
                ParTextoBuscar2.SqlDbType = SqlDbType.VarChar;  
                ParTextoBuscar2.Size = 50;  
                ParTextoBuscar2.Value = TextoBuscar2;  
                SqlCmd.Parameters.Add(ParTextoBuscar2);  
  
                SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);  
                SqlDat.Fill(DtResultado);  
  
            }  
            catch (Exception ex)  
            {  
                DtResultado = null;  
            }  
            return DtResultado;  
  
        }  
  
        //Método BuscarFechas  
        public DataTable MostrarDetalle(String TextoBuscar)  
        {  
            DataTable DtResultado = new DataTable("detalle_ingreso");  
            SqlConnection SqlCon = new SqlConnection();  
            try  
            {  
                SqlCon.ConnectionString = Conexion.Cn;  
                SqlCommand SqlCmd = new SqlCommand();  
                SqlCmd.Connection = SqlCon;  
                SqlCmd.CommandText = "spmostrar_detalle_ingreso";  
                SqlCmd.CommandType = CommandType.StoredProcedure;  
  
                SqlParameter ParTextoBuscar = new SqlParameter();  
                ParTextoBuscar.ParameterName = "@textobuscar";  
                ParTextoBuscar.SqlDbType = SqlDbType.VarChar;  
                ParTextoBuscar.Size = 50;  
                ParTextoBuscar.Value = TextoBuscar;  
                SqlCmd.Parameters.Add(ParTextoBuscar);  
                  
                SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);  
                SqlDat.Fill(DtResultado);  
  
            }  
            catch (Exception ex)  
            {  
                DtResultado = null;  
            }  
            return DtResultado;  
  
        }  
  
  
  
    }  
}  
